// HTTP请求封装
const app = getApp();

// 请求Promise化
const request = (options) => {
  return new Promise((resolve, reject) => {
    console.log('请求参数:', options);
    
    // 组装请求参数
    options = Object.assign({
      header: {
        'Content-Type': 'application/json'
      },
      method: 'GET',
      success: (res) => {
        console.log('请求成功:', res);
        // 接口响应通用处理
        if (res.statusCode === 200) {
          resolve(res.data);
        } else if (res.statusCode === 401) {
          // 接口未授权处理
          wx.removeStorageSync('token');
          app.globalData.token = '';
          
          // 跳转到登录页
          wx.redirectTo({
            url: '/pages/login/login'
          });
          
          reject(res);
        } else {
          // 其他异常
          console.error('请求状态码异常:', res.statusCode, res.data);
          wx.showToast({
            title: res.data?.message || '请求失败',
            icon: 'none'
          });
          reject(res);
        }
      },
      fail: (err) => {
        console.error('请求失败:', err);
        wx.showToast({
          title: '网络请求失败',
          icon: 'none'
        });
        reject(err);
      }
    }, options);
    
    // 添加token
    if (app && app.globalData && app.globalData.token) {
      options.header['Authorization'] = app.globalData.token;
      console.log('添加token到请求头:', app.globalData.token);
    } else {
      console.warn('请求未携带token，可能导致接口授权失败');
    }
    
    // 拼接接口地址
    if (options.url.indexOf('http') !== 0) {
      options.url = app.globalData.baseUrl + options.url;
    }
    
    console.log('最终请求URL:', options.url);
    console.log('最终请求Headers:', options.header);
    console.log('最终请求数据:', options.data);
    
    // 发送请求
    wx.request(options);
  });
};

// 封装GET请求
const get = (url, data) => {
  return request({
    url,
    method: 'GET',
    data
  });
};

// 封装POST请求，自动判断是否使用form格式
const post = (url, data, useFormData = false) => {
  const contentType = useFormData ? 
    'application/x-www-form-urlencoded' : 
    'application/json';
  
  let processedData = data;
  
  // 如果是表单格式，需要将对象转换为查询字符串
  if (useFormData && typeof data === 'object') {
    console.log('转换表单数据:', data);
    processedData = Object.keys(data).map(key => {
      return encodeURIComponent(key) + '=' + encodeURIComponent(data[key] === undefined ? '' : data[key]);
    }).join('&');
    console.log('转换后的表单数据:', processedData);
  }
  
  // 确保数据为JSON格式
  if (!useFormData && typeof data === 'object') {
    try {
      // 测试数据是否可被JSON化
      JSON.stringify(data);
    } catch (e) {
      console.error('JSON序列化数据失败:', e);
    }
  }
    
  return request({
    url,
    method: 'POST',
    data: processedData,
    header: {
      'Content-Type': contentType
    }
  });
};

module.exports = {
  request,
  get,
  post
}; 